home *** CD-ROM | disk | FTP | other *** search
/ GameStar 2004 April / Gamestar_61_2004-04_dvdb.iso / DVDStar / Editace / hltp.exe / {app} / Applications / QuArK / quarkpy / qmenu.py < prev    next >
Text File  |  2004-01-05  |  7KB  |  206 lines

  1. """   QuArK  -  Quake Army Knife
  2.  
  3. Menu Bars and Popup Menus code
  4. """
  5. #
  6. # Copyright (C) 1996-99 Armin Rigo
  7. # THIS FILE IS PROTECTED BY THE GNU GENERAL PUBLIC LICENCE
  8. # FOUND IN FILE "COPYING.TXT"
  9. #
  10. #$Header: /cvsroot/quark/runtime/quarkpy/qmenu.py,v 1.6 2003/03/21 05:57:05 cdunde Exp $
  11.  
  12.  
  13. import quarkx
  14. from qdictionnary import Strings
  15. from qutils import *
  16.  
  17.  
  18. # menu state
  19. normal     = 0
  20. checked    = 2
  21. radiocheck = 3
  22. disabled   = 4    # can be added to the above
  23. default    = 8    # can be added to the above
  24.  
  25.  
  26. class item:
  27.     "A menu item."
  28.  
  29.     #
  30.     # A menu item's onclick attribute must be a callback function,
  31.     # called by QuArK when the user chooses the item in the menu.
  32.     # It will be called with the menu item object itself as parameter.
  33.     #
  34.  
  35.     def __init__(self, text, onclick=None, hint=None, infobaselink=""):
  36.         self.text = text
  37.         self.onclick = onclick
  38.         self.state = normal
  39.         if hint:
  40.             self.hint = hintPlusInfobaselink(hint,infobaselink)
  41.  
  42.  
  43. class popup:
  44.     "A pop-up menu item."
  45.  
  46.     def __init__(self, text, items=[], onclick=None, hint=None, infobaselink=""):
  47.         self.text = text
  48.         self.onclick = onclick   # called when the popup menu is opened;
  49.         self.items = items       # this lets you modify 'items' to reflect the current menu state
  50.         self.state = normal
  51.         if hint:
  52.             self.hint = hintPlusInfobaselink(hint,infobaselink)
  53.  
  54.  
  55. #
  56. # Note: menus may have an attribute "menuicon" with an icon to display next to the menu item.
  57. #
  58.  
  59. # a separator line in the menu
  60. sep = None
  61.  
  62.  
  63.  
  64. def macroitem(text, macro, hint=None, infobaselink=""):
  65.     "A menu item that executes a single macro command."
  66.     if hint:
  67.         hint = hintPlusInfobaselink(hint,infobaselink)
  68.     m = item(text, macroclick, hint)
  69.     m.macro = macro
  70.     return m
  71.  
  72. def macroclick(m):
  73.     if not (quarkx.clickform is None):
  74.         quarkx.clickform.macro(m.macro)   # returns True (1) or False (0) depending on success or failure
  75.  
  76.  
  77. def catmenus(list1, list2):
  78.     "Concat the two lists of menu items, adding a separator if required."
  79.     if len(list1):
  80.         if len(list2):
  81.             return list1 + [sep] + list2
  82.         return list1
  83.     return list2
  84.  
  85.  
  86.  
  87. #
  88. # Standard menus.
  89. #
  90.  
  91. def DefaultFileMenu():
  92.     "The standard File menu, with its shortcuts."
  93.  
  94.     #NewMap1 = item("&New map")  # not implemented yet
  95.     Open1 = macroitem("&Open...", "FOPN", "|You can open a file of ANY type.", "intro.mapeditor.menu.html#filemenu")
  96.     savehint = "|You have several ways to save your maps :\n\nAs .map files : the .map format is standard among all Quake editors, but you should only use it to exchange data with another editor, because QuArK cannot store its own data in .map files (e.g. groups, duplicators, etc).\n\nAs .qkm files : this is QuArK's own file format for maps.\n\nInside .qrk files : this is the best solution if you want to organize several maps inside a single file. Choose the menu command 'Save in QuArK Explorer'."
  97.     infobaselink = "intro.mapeditor.menu.html#filemenu"
  98.     Save1 = macroitem("&Save", "FSAV", savehint, infobaselink)
  99.     SaveQE1 = macroitem("Save in QuArK &Explorer", "FSAN", savehint, infobaselink)
  100.     SaveAs1 = macroitem("Save &as file...", "FSAA", savehint, infobaselink)
  101.     SaveAll1 = macroitem("Save a&ll", "FSAL", savehint, infobaselink)
  102.     Close1 = macroitem("&Close", "EXIT", "close the map editor")
  103.     File1 = popup("&File", [Open1, Save1, SaveQE1,
  104.      SaveAs1, sep, SaveAll1, sep, Close1])
  105.     sc = {}
  106.     MapHotKeyList("Open", Open1, sc)
  107.     MapHotKeyList("Save", Save1, sc)
  108.     MapHotKeyList("Close", Close1, sc)
  109.     return File1, sc
  110.  
  111.  
  112.  
  113. def DefaultFileMenuBsp():
  114.     "The standard File menu for .bsp files."
  115.  
  116.     Open1 = macroitem("&Open...", "FOPN", "open a file of ANY type")
  117.     Close1 = macroitem("&Close BSP editor", "EXIT", "close the BSP editor")
  118.     File1 = popup("&File", [Open1, sep, Close1])
  119.     sc = {}
  120.     MapHotKeyList("Open", Open1, sc)
  121.     MapHotKeyList("Close", Close1, sc)
  122.     return File1, sc
  123.  
  124.  
  125.  
  126. def Edit1Click(Edit1):
  127.     undo, redo = quarkx.undostate(Edit1.Root)
  128.     if undo is None:
  129.         Edit1.Undo1.text = Strings[113]   # nothing to undo
  130.         Edit1.Undo1.state = disabled
  131.     else:
  132.         Edit1.Undo1.text = Strings[44] % undo
  133.         Edit1.Undo1.state = normal
  134.     if redo is None:
  135.         if Edit1.Redo1 in Edit1.items:
  136.             Edit1.items.remove(Edit1.Redo1)  # nothing to redo
  137.     else:
  138.         if not (Edit1.Redo1 in Edit1.items):
  139.             Edit1.items.insert(Edit1.items.index(Edit1.Undo1)+1, Edit1.Redo1)
  140.         Edit1.Redo1.text = Strings[45] % redo
  141.     Edit1.editcmdgray(Edit1.Cut1, Edit1.Copy1, Edit1.Delete1)
  142.     Edit1.Duplicate1.state = Edit1.Copy1.state
  143.     Edit1.Paste1.state = not quarkx.pasteobj() and disabled
  144.  
  145.  
  146. editmenu = {}
  147.  
  148. def DefaultEditMenu(editor):
  149.     "The standard Edit menu, with its shortcuts."
  150.  
  151.     infobaselink = "intro.mapeditor.menu.html#editmenu"
  152.     Undo1 = macroitem("&Undo", "UNDO", "|undo the previous action (unlimited)", infobaselink)
  153.     Redo1 = macroitem("&Redo", "REDO", "|redo what you have just undone", infobaselink)
  154.     UndoRedo1 = macroitem("U&ndo / Redo...", "MURD", "|list of actions to undo/redo", infobaselink)
  155.     Cut1 = item("&Cut", editor.editcmdclick, "|cut the selection to the clipboard", infobaselink)
  156.     Cut1.cmd = "cut"
  157.     Copy1 = item("Cop&y", editor.editcmdclick, "|copy the selection to the clipboard", infobaselink)
  158.     Copy1.cmd = "copy"
  159.     Paste1 = item("&Paste", editor.editcmdclick, "|paste a map object from the clipboard", infobaselink)
  160.     Paste1.cmd = "paste"
  161.     Duplicate1 = item("Dup&licate", editor.editcmdclick, "|This makes a copy of the selected object(s). The copies are created at exactly the same position as the original, so don't be surprised if you don't see them : there are here, waiting to be moved elsewhere.", infobaselink)
  162.     Duplicate1.cmd = "dup"
  163.     Delete1 = item("&Delete", editor.editcmdclick, "|delete the selection", infobaselink)
  164.     Delete1.cmd = "del"
  165.     Edit1 = popup("&Edit", [Undo1, Redo1, UndoRedo1, sep,
  166.      Cut1, Copy1, Paste1, sep, Duplicate1, Delete1], Edit1Click)
  167.     Edit1.Root = editor.Root
  168.     Edit1.Undo1 = Undo1
  169.     Edit1.Redo1 = Redo1
  170.     Edit1.Cut1 = Cut1
  171.     Edit1.Copy1 = Copy1
  172.     Edit1.Paste1 = Paste1
  173.     Edit1.Duplicate1 = Duplicate1
  174.     Edit1.Delete1 = Delete1
  175.     Edit1.editcmdgray = editor.editcmdgray
  176.     sc = {}
  177.     MapHotKeyList("Cut", Cut1, sc)
  178.     MapHotKeyList("Copy", Copy1, sc)
  179.     MapHotKeyList("Paste", Paste1, sc)
  180.     MapHotKeyList("Delete", Delete1, sc)
  181.     MapHotKeyList("Undo", Undo1, sc)
  182.     MapHotKeyList("Redo", Redo1, sc)
  183.     MapHotKeyList("Duplicate", Duplicate1, sc)
  184.     return Edit1, sc
  185.  
  186. # ----------- REVISION HISTORY ------------
  187. #
  188. #
  189. #$Log: qmenu.py,v $
  190. #Revision 1.6  2003/03/21 05:57:05  cdunde
  191. #Update infobase and add links
  192. #
  193. #Revision 1.5  2003/03/16 02:43:09  tiglari
  194. #fixed minor errors (unnecessary assignments)
  195. #
  196. #Revision 1.4  2003/03/15 20:41:07  cdunde
  197. #To update hints and add infobase links
  198. #
  199. #Revision 1.3  2001/03/20 07:59:40  tiglari
  200. #customizable hot key support
  201. #
  202. #Revision 1.2  2000/06/02 16:00:22  alexander
  203. #added cvs headers
  204. #
  205. #
  206. #